#include "IntBitSet.h"

IntBitSet::IntBitSet(int min, int max){
	minvalue = min; 
	maxvalue = max; 
	len = ( (maxvalue - minvalue) + 1 );

	buffer = (bool*)malloc(  len * sizeof(bool) );	
	for( int i = 0; i <= len; i++ ){
		buffer[i] = false;
	}
}

IntBitSet::~IntBitSet(){
	free(buffer);
}

bool IntBitSet::contains( int value ){
	return buffer[ value - minvalue ];
}

void IntBitSet::add( int value ){
	buffer[ value - minvalue ] = true;
}

void IntBitSet::rem( int value ){
	buffer[ value - minvalue ] = false;
}

void IntBitSet::moveIPtr(){
	do{
		iptr += 1;
		if( buffer[iptr] || (( iptr + minvalue ) > maxvalue) ) break;
	}while( true );
}

IntIterator* IntBitSet::newIterator(){
	iptr = ~0;
	moveIPtr();
	return (IntIterator*)this;
}

bool IntBitSet::hasNext(){
	return ( iptr + minvalue ) < maxvalue;
}

int IntBitSet::next(){
	int rv = ( iptr + minvalue );
	moveIPtr();
	return rv;
}